home *** CD-ROM | disk | FTP | other *** search
- /*plot.amiga for amiga version of PARI, based on plot.sun */
-
-
- /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
- /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
- /* */
- /* PLOT EN HAUTE RESOLUTION */
- /* */
- /* copyright Babe Cool */
- /* */
- /* */
- /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
- /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
-
- # include "genpari.h"
-
-
-
- #include <exec/types.h>
- #include <intuition/intuition.h>
- #include <graphics/gfxmacros.h>
- #include <string.h>
-
- typedef struct spoint {
- int x,y;} SPoint;
- typedef struct ssegment {
- int x1,y1,x2,y2;} SSegment;
- typedef struct srectangle {
- int x,y,width,height;} SRectangle;
-
- long GfxBase;
-
- #undef ISCR
- #undef JSCR
- #define ISCR 640 /* hires width*/
- #define JSCR 400 /* hires height*/
- #define DECI 50 /* 140 en haute resolution */
- #define DECJ 25 /* 70 en haute resolution */
- #define IDEC 5
- #define JDEC 10
-
-
-
- GEN ploth(entree *ep,GEN a,GEN b,char *ch, long prec)
-
-
-
- {
-
- struct IntuiMessage *msg;
-
- struct TextAttr myfont =
-
- {
- (STRPTR)"topaz.font", 8 , 0 , 0
- };
-
- struct NewScreen myscreen1 =
- {
- 0, 0,
- 650, 420,
- 2,
- 1,2,
- HIRES | LACE,
- CUSTOMSCREEN,
- NULL,/*(struct TextAttr *)&myfont,*/
- (UBYTE *)"ploth",
- NULL,
- NULL
-
- };
-
- struct NewWindow myWindow =
-
- {
- 0,
-
- 5,
- 640,410,
- -1,
- -1,
-
- CLOSEWINDOW ,/* | REFRESHWINDOW ,*/
-
- SMART_REFRESH | WINDOWCLOSE | WINDOWDRAG,
-
-
-
- NULL,
-
- NULL,
-
- (UBYTE *)"PLOTH",
-
- NULL,
- NULL,
- 10, 10,
-
- 640, 400,
-
- CUSTOMSCREEN
-
- };
-
- long av,av2,j,j1,i,sig,is,is2,js,js2;
- GEN p1,p2,p3,p4,ysml,ybig,x,diff,dyj,dx,y[ISCR+1];
- short h, iz=0, jz = 0, ordonnee[ISCR+1];
- char c1[20], c2[20], c3[20], c4[20];
-
- struct Screen *s, *OpenScreen();
- struct Window *w, *OpenWindow();
- struct RastPort *rp;
-
- GfxBase=OpenLibrary("graphics.library",0);
- if(!GfxBase )
- { printf("can not open graphics.library\n");
- return(gnil);
- }
-
- is=ISCR-DECI;js=JSCR-DECJ;is2=is-DECI;js2=js-DECJ;
-
- sig=gcmp(b,a); if(!sig) return gnil;
- av=avma;
- if(sig<0) {x=a;a=b;b=x;}
-
- for(i=1;i<=is2;i++) y[i]=cgetr(3);
- newvalue(ep,cgetr(prec)); x=(GEN)ep->value;
- /*printf("gaffect 1\n");*/
- gaffect(a,x);
- dx=gdivgs(gsub(b,a),is2-1);ysml=gzero;ybig=gzero;
- av2=avma;
- for(i=1;i<=is2;i++)
- {
-
- /*printf("gaffect %d\n",i);*/
- gaffect(lisexpr(ch),y[i]);
- if(gcmp(y[i],ysml)<0) ysml=y[i];
- if(gcmp(y[i],ybig)>0) ybig=y[i];
- gaddz(x,dx,x);avma=av2;
- }
- diff=gsub(ybig,ysml);
- if(gcmp0(diff)) {ybig=gaddsg(1,ybig);diff=gun;}
- dyj=gdivsg(js2-1,diff);av2=avma;
-
- for(i = 1; i <= is2; i++)
- {
- ordonnee[i] = DECJ+itos(ground(gmul(gsub(ybig, y[i]),dyj)));
- avma=av2;
- }
-
- if(gsigne(ybig)*gsigne(ysml)<0) jz=
- DECJ + itos(ground(gmul(ybig,dyj)));
-
- if(gsigne(a)*gsigne(b)<0) iz=
- DECI + itos(ground(gmulsg(is2, gdiv(a, gsub(a, b)))));
-
- p1=cgetr(4); gaffect(ybig,p1); sprintf(c1," %9.3lf ",rtodbl(p1));
- p2=cgetr(4); gaffect(ysml,p2); sprintf(c2," %9.3lf ",rtodbl(p2));
- p3=cgetr(4); gaffect(a,p3); sprintf(c3," %9.3lf ",rtodbl(p3));
- p4=cgetr(4); gaffect(b,p4); sprintf(c4," %9.3lf ",rtodbl(p4));
- /*printf("%s %s %s %s\n",c1,c2,c3,c4);*/
-
-
- s=OpenScreen(&myscreen1);
- myWindow.Screen=s;
-
- w=OpenWindow(&myWindow);
- if(w==0 | s==0){printf("can not open window or screen\n");
- if(w) CloseWindow(w);
- if(s) CloseScreen(s);
-
- avma = av;
-
- killvalue(ep);
- return gnil;
- }
- rp=w->RPort;
- SetDrMd(rp,JAM1);
- SetAPen(rp,1);
- /******Draw the box and axes***/
- Move(rp,DECI,DECJ);Draw(rp,DECI,js);
- Move(rp,DECI,DECJ);Draw(rp,is,DECJ);
- Move(rp,is,DECJ);Draw(rp,is,js);
- Move(rp,DECI,js);Draw(rp,is,js);
-
- if(iz) {Move(rp,iz,js);Draw(rp,iz,DECJ);}
-
- if(jz) {Move(rp,is,jz);Draw(rp,DECI,jz);}
-
- Move(rp,-25,DECJ); Text(rp,c1,strlen(c1));
- Move(rp,-25,js); Text(rp,c2,strlen(c2));
- Move(rp,DECI-30,js+20); Text(rp,c3,strlen(c3));
- Move(rp,is2,js+20); Text(rp,c4,strlen(c4));
- Move(rp,DECI,ordonnee[1]);
- for (i = 1, h = 0; i <= is2; i++) Draw(rp,++h + DECI, ordonnee[i]);
-
- while(1)
- {
- WaitPort(w->UserPort);
- msg=(struct IntuiMessage *)GetMsg(w->UserPort);
- if(msg->Class == CLOSEWINDOW) break;
- }
-
- CloseWindow(w);
- CloseScreen(s);
-
- avma = av;
-
- killvalue(ep);
- return gnil;
- }
-
- GEN ploth2(ep,a,b,ch,prec)
- entree *ep;
- GEN a,b;
- char *ch;
- long prec;
-
-
-
-
-
-
- {
-
- struct IntuiMessage *msg;
-
- struct TextAttr myfont =
-
- {
- (STRPTR)"topaz.font", 8 , 0 , 0
- };
-
- struct NewScreen myscreen1 =
- {
- 0, 0,
- 650, 420,
- 2,
- 1,2,
- HIRES | LACE,
- CUSTOMSCREEN,
- NULL,/*(struct TextAttr *)&myfont,*/
- (UBYTE *)"ploth2",
- NULL,
- NULL
-
- };
-
- struct NewWindow myWindow =
-
- {
- 0,
-
- 5,
- 640,410,
- -1,
- -1,
-
- CLOSEWINDOW | REFRESHWINDOW ,
-
- SMART_REFRESH | WINDOWCLOSE | WINDOWDRAG,
-
- NULL,
-
- NULL,
-
- (UBYTE *)"PLOTH2",
-
- NULL,
- NULL,
- 10, 10,
-
- 640, 400,
-
- CUSTOMSCREEN
-
- };
-
- long av,av2,k,k1,j,j1,i,sig,is,is2,js,js2;
- GEN p1,p2,p3,p4,ysml,ybig,xsml,xbig,diffx,diffy,dxj,t,dyj,dt,y[ISCR+1],x[ISCR+1];
- short h, iz=0, jz = 0;
- char c1[20], c2[20], c3[20], c4[20];
-
- struct Screen *s, *OpenScreen();
- struct Window *w, *OpenWindow();
- struct RastPort *rp;
-
- GfxBase=OpenLibrary("graphics.library",0);
-
-
- is=ISCR-DECI;js=JSCR-DECJ;is2=is-DECI;js2=js-DECJ;
-
- sig=gcmp(b,a); if(!sig) return gnil;
- av=avma;
- if(sig<0) {p1=a;a=b;b=p1;}
-
- for(i=1;i<=is2;i++) {x[i]=cgetr(3);y[i]=cgetr(3);}
- newvalue(ep,cgetr(prec)); t=(GEN)ep->value;
- gaffect(a,t);
- dt=gdivgs(gsub(b,a),is2-1);ysml=ybig=xsml=xbig=gzero;
- av2=avma;
- for(i=1;i<=is2;i++)
- {
- p1=lisexpr(ch);gaffect((GEN)p1[1],x[i]);gaffect((GEN)p1[2],y[i]);
- if(gcmp(y[i],ysml)<0) ysml=y[i];
- if(gcmp(y[i],ybig)>0) ybig=y[i];
- if(gcmp(x[i],xsml)<0) xsml=x[i];
- if(gcmp(x[i],xbig)>0) xbig=x[i];
- gaddz(t,dt,t);avma=av2;
- }
- diffy=gsub(ybig,ysml);
- if(gcmp0(diffy)) {ybig=gaddsg(1,ybig);diffy=gun;}
- diffx=gsub(xbig,xsml);
- if(gcmp0(diffx)) {xbig=gaddsg(1,xbig);diffx=gun;}
- dyj=gdivsg(js2-1,diffy);jz=js+itos(ground(gmul(ysml,dyj)));
- dxj=gdivsg(is2-1,diffx);iz=DECI-itos(ground(gmul(xsml,dxj)));
-
- if(gsigne(ybig)*gsigne(ysml)<0) jz=
- DECJ + itos(ground(gmul(ybig,dyj)));
-
- if(gsigne(xsml)*gsigne(ysml)<0) iz=
- DECI + itos(ground(gmulsg(is2, gdiv(a, gsub(a, b)))));
- /****************
- for(i=1;i<=is2;i++)
- {
- ordonneey[i] = DECJ+itos(ground(gmul(gsub(ybig, y[i]),dyj)));
- ordonneey[i] = DECI+itos(ground(gmul(gsub(x[i], xsml),dxj)));
-
- av2=avma;
-
- }
- ****************/
- p1=cgetr(4); gaffect(ybig,p1); sprintf(c1," %9.3lf ",rtodbl(p1));
- p2=cgetr(4); gaffect(ysml,p2); sprintf(c2," %9.3lf ",rtodbl(p2));
- p3=cgetr(4); gaffect(xsml,p3); sprintf(c3," %9.3lf ",rtodbl(p3));
- p4=cgetr(4); gaffect(xbig,p4); sprintf(c4," %9.3lf ",rtodbl(p4));
- /*printf("%s %s %s %s\n",c1,c2,c3,c4);*/
-
-
- s=OpenScreen(&myscreen1);
- myWindow.Screen=s;
-
- w=OpenWindow(&myWindow);
- if(w==0){printf("can not open window\n");
- CloseScreen(s);
-
- avma = av;
-
- killvalue(ep);
- return gnil;
- }
- rp=w->RPort;
- SetDrMd(rp,JAM1);
- SetAPen(rp,1);
-
- Move(rp,DECI,DECJ);Draw(rp,DECI,js);
- Move(rp,DECI,DECJ);Draw(rp,is,DECJ);
- Move(rp,is,DECJ);Draw(rp,is,js);
- Move(rp,DECI,js);Draw(rp,is,js);
-
- if(iz) {Move(rp,iz,js);Draw(rp,iz,DECJ);}
-
- if(jz) {Move(rp,is,jz);Draw(rp,DECI,jz);}
-
- Move(rp,-25,DECJ); Text(rp,c1,strlen(c1));
- Move(rp,-25,js); Text(rp,c2,strlen(c2));
- Move(rp,DECI-30,js+20); Text(rp,c3,strlen(c3));
- Move(rp,is2,js+20); Text(rp,c4,strlen(c4));
- /* Move(rp,DECI,ordonnee[1]);*/
- for (i = 1, h = 0; i <= is2; i++)
- {
-
-
- k1= DECJ+itos(ground(gmul(gsub(ybig, y[i]),dyj)));
- j1= DECI+itos(ground(gmul(gsub(x[i], xsml),dxj)));
- if(i==1) {Move(rp,j1,k1);}
- else
- {
- Draw(rp,j1, k1);
- }
- }
-
- while(1)
- {
- WaitPort(w->UserPort);
- msg=(struct IntuiMessage *)GetMsg(w->UserPort);
- if(msg->Class == CLOSEWINDOW) break;
- }
-
- CloseWindow(w);
- CloseScreen(s);
-
- avma = av;
-
- killvalue(ep);
- return gnil;
- }
-
-
- _abort()
- {
- err(interrupter);
- }
-
- GEN plothraw(listx,listy)
- GEN listx, listy;
- {
-
-
-
- struct IntuiMessage *msg;
-
- struct TextAttr myfont =
-
- {
- (STRPTR)"topaz.font", 8 , 0 , 0
- };
-
- struct NewScreen myscreen1 =
- {
- 0, 0,
- 650, 420,
- 2,
- 1,2,
- HIRES | LACE,
- CUSTOMSCREEN,
- NULL,/*(struct TextAttr *)&myfont,*/
- (UBYTE *)"plothraw",
- NULL,
- NULL
-
- };
-
- struct NewWindow myWindow =
-
- {
- 0,
-
- 5,
- 640,410,
- -1,
- -1,
-
- CLOSEWINDOW ,/* | REFRESHWINDOW ,*/
-
- SMART_REFRESH | WINDOWCLOSE | WINDOWDRAG,
-
-
-
- NULL,
-
- NULL,
-
- (UBYTE *)"PLOTHRAW",
-
- NULL,
- NULL,
- 10, 10,
-
- 640, 400,
-
- CUSTOMSCREEN
-
- };
-
- long av=avma,av2,i,lx,sig,is,is2,js,js2;
- SPoint *points;
-
-
- GEN p1,p2,p3,p4,xsml,xbig,ysml,ybig,dx,dy,scal,scaly;
- short h, iz=0, jz = 0, ordonnee[ISCR+1];
- char c1[20], c2[20], c3[20], c4[20];
-
- struct Screen *s, *OpenScreen();
- struct Window *w, *OpenWindow();
- struct RastPort *rp;
-
- GfxBase=OpenLibrary("graphics.library",0);
- if(!GfxBase )
- { printf("can not open graphics.library\n");
- return(gnil);
- }
-
- if((typ(listx)<17)||(typ(listx)>18)||(typ(listy)<17)||(typ(listy)>18))
- err(ploter4);
- lx=lg(listx);
- if(lg(listy)!=lx) err(ploter5);
- if(lx==1) return gnil;
- points = (SPoint*)malloc(lx*sizeof(SPoint));
- if(!points) err(ploter6);
- is=ISCR-IDEC-5;js=JSCR-JDEC-10;is2=is+IDEC;js2=js+JDEC;
- av=avma;xsml=xbig=(GEN)listx[1];ysml=ybig=(GEN)listy[1];
- /************************
- is=ISCR-DECI;js=JSCR-DECJ;is2=is-DECI;js2=js-DECJ;
- ***************************/
-
- for(i = 0; i < lx-1; i++)
- {
- p1=(GEN)listx[i+1];
- if(gcmp(p1,xsml)<0) xsml=p1;if(gcmp(p1,xbig)>0) xbig=p1;
- p1=(GEN)listy[i+1];
- if(gcmp(p1,ysml)<0) ysml=p1;if(gcmp(p1,ybig)>0) ybig=p1;
- }
- dx=gsub(xbig,xsml);dy=gsub(ybig,ysml);
- if(gcmp0(dx))
- {
- if(gcmp0(dy))
- {
- scal=gun;dx=gsubsg(is>>1,xsml);
- dy=gsubsg(js>>1,ysml);
- }
- else
- {
- scal=gdivsg(js,dy);
- dx=gneg(gmul(scal,xsml));dy=gneg(gmul(scal,ysml));
- }
- }
- else
- {
- scal=gdivsg(is,dx);
- if(!gcmp0(dy))
- {
- scaly=gdivsg(js,dy);if(gcmp(scaly,scal)<0) scal=scaly;
- }
-
- dx=gneg(gmul(scal,xsml));dy=gneg(gmul(scal,ybig));
- }
- for(i = 0; i < lx-1; i++)
- {
- av2=avma;
- points[i].x = IDEC + itos(ground(gadd(gmul((GEN)listx[i+1],scal),dx)));
- points[i].y = JDEC - itos(ground(gadd(gmul((GEN)listy[i+1],scal),dy)));
- avma=av2;
- }
- /********************
- for(i=1;i<=is2;i++) y[i]=cgetr(3);
- newvalue(ep,cgetr(3)); x=(GEN)ep->value;
-
- gaffect(a,x);
- dx=gdivgs(gsub(b,a),is2-1);ysml=gzero;ybig=gzero;
- av2=avma;
- *****************************/
-
- /*******************
- for(i=1;i<=is2;i++)
- {
-
-
- gaffect(lisexpr(ch),y[i]);
- if(gcmp(y[i],ysml)<0) ysml=y[i];
- if(gcmp(y[i],ybig)>0) ybig=y[i];
- gaddz(x,dx,x);avma=av2;
- }
- diff=gsub(ybig,ysml);
- if(gcmp0(diff)) {ybig=gaddsg(1,ybig);diff=gun;}
- dyj=gdivsg(js2-1,diff);av2=avma;
-
- for(i = 1; i <= is2; i++)
- {
- ordonnee[i] = DECJ+itos(ground(gmul(gsub(ybig, y[i]),dyj)));
- avma=av2;
- }
-
- if(gsigne(ybig)*gsigne(ysml)<0) jz=
- DECJ + itos(ground(gmul(ybig,dyj)));
-
- if(gsigne(a)*gsigne(b)<0) iz=
- DECI + itos(ground(gmulsg(is2, gdiv(a, gsub(a, b)))));
-
- p1=cgetr(4); gaffect(ybig,p1); sprintf(c1," %9.3lf ",rtodbl(p1));
- p2=cgetr(4); gaffect(ysml,p2); sprintf(c2," %9.3lf ",rtodbl(p2));
- p3=cgetr(4); gaffect(a,p3); sprintf(c3," %9.3lf ",rtodbl(p3));
- p4=cgetr(4); gaffect(b,p4); sprintf(c4," %9.3lf ",rtodbl(p4));
- *************************************/
-
-
- s=OpenScreen(&myscreen1);
- myWindow.Screen=s;
-
- w=OpenWindow(&myWindow);
- if(w==0 | s==0){printf("can not open window or screen\n");
- if(w) CloseWindow(w);
- if(s) CloseScreen(s);
-
- avma = av;
-
- free(points);
- return gnil;
- }
- rp=w->RPort;
- SetDrMd(rp,JAM1);
- SetAPen(rp,1);
- /******Draw the box and axes***/
- Move(rp,IDEC,JDEC);Draw(rp,IDEC,js2);
- Move(rp,IDEC,JDEC);Draw(rp,is2,JDEC);
- Move(rp,is2,JDEC);Draw(rp,is2,js2);
- Move(rp,IDEC,js2);Draw(rp,is2,js2);
- /*************************
- if(iz) {Move(rp,iz,js);Draw(rp,iz,DECJ);}
-
- if(jz) {Move(rp,is,jz);Draw(rp,DECI,jz);}
-
-
- Move(rp,-25,DECJ); Text(rp,c1,strlen(c1));
- Move(rp,-25,js); Text(rp,c2,strlen(c2));
- Move(rp,DECI-30,js+20); Text(rp,c3,strlen(c3));
- Move(rp,is2,js+20); Text(rp,c4,strlen(c4));
- Move(rp,DECI,ordonnee[1]);
- for (i = 1, h = 0; i <= is2; i++) Draw(rp,++h + DECI, ordonnee[i]);
- ********************************/
-
-
- for(i = 0; i < lx-1;i++)
- WritePixel(rp,points[i].x,points[i].y);
-
- /* PolyDraw(rp,lx,points);*/
- while(1)
- {
- WaitPort(w->UserPort);
- msg=(struct IntuiMessage *)GetMsg(w->UserPort);
- if(msg->Class == CLOSEWINDOW) break;
- }
-
- CloseWindow(w);
- CloseScreen(s);
-
- free(points);avma = av;
- return gnil;
-
-
- }
-
-
- GEN rectdraw(list)
- GEN list;
- {
- struct IntuiMessage *msg;
-
- struct TextAttr myfont =
-
- {
- (STRPTR)"topaz.font", 8 , 0 , 0
- };
-
- struct NewScreen myscreen1 =
- {
- 0, 0,
- 650, 420,
- 2,
- 1,2,
- HIRES | LACE,
- CUSTOMSCREEN,
- NULL,/*(struct TextAttr *)&myfont,*/
- (UBYTE *)"draw",
- NULL,
- NULL
-
- };
-
- struct NewWindow myWindow =
-
- {
- 0,
-
- 5,
- 640,410,
- -1,
- -1,
-
- CLOSEWINDOW ,/* | REFRESHWINDOW ,*/
-
- SMART_REFRESH | WINDOWCLOSE | WINDOWDRAG | GIMMEZEROZERO,
-
-
-
- NULL,
-
- NULL,
-
- (UBYTE *)"DRAW",
-
- NULL,
- NULL,
- 10, 10,
-
- 640, 400,
-
- CUSTOMSCREEN
-
- };
-
- long *e,*p1,*ptx,*pty,*numpoints,*numtexts,*xtexts,*ytexts;
- long n,i,j,x0,y0,av=avma;
- long a,b,c,d,nd[10],ne;
- char **texts;
-
- SPoint *points, **lines, *SLine;
- SSegment *segments;
- SRectangle *rectangles, SRec;
-
-
- struct Screen *s, *OpenScreen();
- struct Window *w, *OpenWindow();
- struct RastPort *rp;
-
- GfxBase=OpenLibrary("graphics.library",0);
- if(!GfxBase )
- { printf("can not open graphics.library\n");
- return(gnil);
- }
-
-
- if(typ(list)!=17) err(rploter3);
- n=lg(list)-1;if(n%3) err(rploter4);
- n=n/3;if(!n) return gnil;
- nd[0]=nd[1]=nd[2]=nd[3]=nd[4]=nd[5]=nd[6]=0;
- for(i=0;i<n;i++)
- {
- if(typ((GEN)list[3*i+1])!=1) err(rploter5);
- ne=itos((GEN)list[3*i+1]);if((ne<0)||(ne>15)) err(rploter2);
- e=rectgraph[ne];
- p1=(long*)e[0];while((long)p1)
- {
- if(p1[1]!=4) nd[p1[1]]++;
- else nd[1]+=p1[2];
- p1=(long*)p1[0];
- }
- }
-
- points=(SPoint*)malloc(nd[1]*sizeof(SPoint));
- segments=(SSegment*)malloc(nd[2]*sizeof(SSegment));
- rectangles=(SRectangle*)malloc(nd[3]*sizeof(SRectangle));
- lines=(SPoint**)malloc(nd[5]*sizeof(SPoint*));
- numpoints=(long*)malloc(nd[5]*sizeof(long));
- texts=(char**)malloc(nd[6]*sizeof(char*));
- numtexts=(long*)malloc(nd[6]*sizeof(long));
- xtexts=(long*)malloc(nd[6]*sizeof(long));
- ytexts=(long*)malloc(nd[6]*sizeof(long));
- nd[1]=nd[2]=nd[3]=nd[5]=nd[6]=0;
-
- for(i=0;i<n;i++)
- {
- e=rectgraph[itos((GEN) list[3*i+1])];x0=list[3*i+2];y0=list[3*i+3];
-
- if((typ((GEN)x0)!=1)||(typ((GEN)y0)!=1)) err(rploter5);
- x0=itos((GEN)x0);y0=itos((GEN)y0);
- p1=(long*)e[0];
- while((long)p1)
- {
- switch(p1[1])
- {
- case 1:
- points[nd[1]].x=p1[2]+x0;
- points[nd[1]].y=p1[3]+y0;
- nd[1]++;break;
- case 2:
- segments[nd[2]].x1=p1[2]+x0;
- segments[nd[2]].y1=p1[3]+y0;
- segments[nd[2]].x2=p1[4]+x0;
- segments[nd[2]].y2=p1[5]+y0;
- nd[2]++;break;
- case 3:
- a=rectangles[nd[3]].x=p1[2]+x0;
- b=rectangles[nd[3]].y=p1[3]+y0;
- rectangles[nd[3]].width=p1[4]+x0-a;
- rectangles[nd[3]].height=p1[5]+y0-b;
- nd[3]++;break;
- case 4:
- ptx=(long*)p1[3];pty=(long*)p1[4];
- for(j=0;j<p1[2];j++)
- {
- points[nd[1]+j].x=ptx[j]+x0;
- points[nd[1]+j].y=pty[j]+y0;
- }
- nd[1]+=p1[2];break;
- case 5:
- ptx=(long*)p1[3];pty=(long*)p1[4];
- numpoints[nd[5]]=p1[2];
- lines[nd[5]]=(SPoint*)malloc(p1[2]*sizeof(SPoint));
- for(j=0;j<p1[2];j++)
- {
- lines[nd[5]][j].x=ptx[j]+x0;
- lines[nd[5]][j].y=pty[j]+y0;
- }
- nd[5]++;break;
- case 6:
- texts[nd[6]]=(char*)p1[3];numtexts[nd[6]]=p1[2];
- xtexts[nd[6]]=p1[4]+x0;ytexts[nd[6]]=p1[5]+y0;
- nd[6]++;break;
- default: break;
- }
- p1=(long*)p1[0];
- }
- }
-
- s=OpenScreen(&myscreen1);
- myWindow.Screen=s;
-
- w=OpenWindow(&myWindow);
- if(w==0 | s==0){printf("can not open window or screen\n");
- if(w) CloseWindow(w);
- if(s) CloseScreen(s);
-
- avma = av;
-
-
- free(points);free(segments);free(rectangles);
- free(numpoints);for(i=0;i<nd[5];i++) free(lines[i]);
- free(lines);free(texts);free(numtexts);free(xtexts);free(ytexts);
- return gnil;
- }
- rp=w->RPort;
- SetDrMd(rp,JAM1);
- SetAPen(rp,1);
- for(i=0;i<nd[1];i++) WritePixel(rp,points[i].x,points[i].y);
- for(i=0;i<nd[2];i++) {Move(rp,segments[i].x1,segments[i].y1);
- Draw(rp,segments[i].x2,segments[i].y2);}
- for(i=0;i<nd[3];i++)
- {
- SRec=rectangles[i];a=SRec.x;b=SRec.y;c=a+SRec.width;
- d=b+SRec.height;
- /*printf("%d %d %d %d\n",a,b,c,d); */
- Move(rp,a,b);
- Draw(rp,c,b);Draw(rp,c,d);Draw(rp,a,d);Draw(rp,a,b);
- }
- for(i=0;i<nd[5];i++)
- {
- SLine=lines[i];
- Move(rp,SLine[0].x,SLine[0].y);
- for(j=1;j<numpoints[i];j++)
- Draw(rp,SLine[j].x,SLine[j].y);
- }
- for(i=0;i<nd[6];i++)
- { Move(rp,xtexts[i],ytexts[i]);
- Text(rp,texts[i],strlen(texts[i]));
- }
-
- while(1)
- {
- WaitPort(w->UserPort);
- msg=(struct IntuiMessage *)GetMsg(w->UserPort);
- if(msg->Class == CLOSEWINDOW) break;
- }
-
- CloseWindow(w);
- CloseScreen(s);
- free(points);free(segments);free(rectangles);
- free(numpoints);for(i=0;i<nd[5];i++) free(lines[i]);
- free(lines);free(texts);free(numtexts);free(xtexts);free(ytexts);
- avma = av;return gnil;
-
- }
-